package main


//目标：实现区块链
//将产生的区块串接起来

type BlockChain struct {
	// 定一个区块链的结构：定一个[]*Block
	Blocks []*Block
}

func NewBlockChain() *BlockChain {
	// 对这个区块链进行初始化，就是把创世块作为第一个元素添加进去
	genesisBlock := GenesisBlock(genesisInfo, []byte{})
	bc := BlockChain{[]*Block{genesisBlock}}
	return &bc
}

func (bc *BlockChain) AddBlock(data string) {
	//1. 产生区块
	// >1. 数据 和前区块的哈希值
	// >2. 通过数组的下标，拿到最后一个区块的哈希值，这个哈希值就是我们新区块的前哈希值
	blockLen := len(bc.Blocks)
	lastBlock := bc.Blocks[blockLen-1]
	//最后一个区块的哈希值是新区块的前哈希
	prevBlockHash := lastBlock.Hash

	block := NewBlock(data, prevBlockHash)

	//2. 向bc中添加新区块
	bc.Blocks = append(bc.Blocks, block)
}
